一个普通技术宅的点点滴滴

0%

学习总结第二十六天——基于栈的括号 匹配

今天继续对于栈的用法进行学习,实现了一个检查括号是否匹配的程序。但我觉得在switch语句上应该还有优化空间的,代码如下,用到了之前我构建的stacklib库:

#include "stacklib.h"

#include <string.h>
#ifndef INPUT_MAX_LENGTH
#define INPUT_MAX_LENGTH 50
#endif

int main(int argc, char const *argv[]) {
  char str[INPUT_MAX_LENGTH+1];
  fgets (str,INPUT_MAX_LENGTH,stdin);
  stack *brackets=StackCreate();
  bool is_match=true;
  for (int i=0;i<strlen(str);i++)
  {
    if (strchr("{[(",str[i])!=NULL)
    {
      StackPush(brackets,str[i]);
    }
    if (strchr("}])",str[i])!=NULL)
    {
      char pop_ch,compare_ch;
      pop_ch=StackPop(brackets);
      if (pop_ch==POP_ERR)
        is_match=false;
        switch (pop_ch) {
          case '(':
          compare_ch=')';
          break;
          case '[':
          compare_ch=']';
          break;
          case '{':
          compare_ch='}';
          break;
          default:
          break;
        }
        if (compare_ch!=str[i])
        is_match=false;
      }
    }
    if (!StackIsEmpty(brackets))
    {
      is_match=false;
    }
    puts (is_match?"TRUE":"FALSE");
    return 0;
  }